package com.innjia.sys.service;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.innjia.base.common.ResultInfo;
import com.innjia.sys.entity.ContractInfoEntity;
import com.innjia.sys.entity.SignRequestInfoEntity;

/**
 * 
 * 
 * @author innjia
 * @date 2017-11-14 09:56:19
 */
public interface ContractInfoService {
	
	ContractInfoEntity queryObject(String id);
	
	List<ContractInfoEntity> queryList(Map<String, Object> map);

	int searchCountQueryList(Map<String, Object> map);

	int searchCountAppTenantList(Map<String, Object> map);

	int searchCountAppLandlordList(Map<String, Object> map);

	ContractInfoEntity searchPhone(Map<String, Object> map);


	List<ContractInfoEntity> searchContractQueryList();

	List<ContractInfoEntity> searchAppTenantList(Map<String, Object> map);

	List<ContractInfoEntity> searchAppLandlordList(Map<String, Object> map);

    List<ContractInfoEntity> queryListByBean(ContractInfoEntity entity);

	int queryTotal(Map<String, Object> map);

	int save(ContractInfoEntity contractInfo);

	int update(ContractInfoEntity contractInfo);

	int delete(String id);

	int deleteBatch(String[] ids);

	/**
	 * 查询履行合约记录
	 * @param map
	 * @return
	 */
	int dulfillmentOfContractRecords(Map<String, Object> map);


	/**
	 * 搜索
	 * @param map
	 * @return
	 */

	List<ContractInfoEntity> searchQueryList(Map<String, Object> map);

	/**
	 * 核身签约
	 * @param certName
	 * @param certNo
	 * @param contractId
	 * @param entity
	 * @return
	 * ResultInfo
	 */
	ResultInfo updateContractSign(String contractId, String certName, String certNo, String signKeyword, SignRequestInfoEntity entity);

	/**
	 * 通过房东签约芝麻认证唯一标识查询合同
	 * @param bizNo
	 * @return
	 * ContractInfoEntity
	 */
	ContractInfoEntity queryByBizNoA(String bizNo);
	
	/**
	 * 通过租客签约芝麻认证唯一标识查询合同
	 * @param bizNo
	 * @return
	 * ContractInfoEntity
	 */
	ContractInfoEntity queryByBizNoB(String bizNo);
	
	 /**
     * 根据租客或者房东手机号查询待签约并且签约有效时限小于当前时间的合同
     * @param phone 可为空，为空时返回所有待签约状态并未有效时限小于当前时间的合同
     * @return
     * List<ContractInfoEntity>
     */
	List<ContractInfoEntity> queryByTenantOrLandlordPhone(String phone);
	
	/**
	 * 从阿里平台查询认证结果
	 * @param bizNo
	 * @return
	 * ResultInfo
	 */
	ResultInfo queryCertificationResult(String bizNo);

	/**
	 * 通过房源id获取合约
	 * @param houseId
	 * @return
	 */
	ContractInfoEntity queryHouseId(String houseId);

	/**
	 * 通过房源编码获取合约
	 * @param houseCode
	 * @return
	 */
	ContractInfoEntity queryHouseCode(String houseCode);
	
	/**
	 * 创建合同，并调用芝麻接口初始化合约，更新房态
	 * @return
	 * boolean
	 */
	boolean saveContract(ContractInfoEntity entity);
	
	/**
	 * 更新合同状态及房源状态
	 * @param entity
	 * @param hosueStatus
	 * @return
	 * boolean
	 */
	boolean updateContractAndHouseStatus(ContractInfoEntity entity, String hosueStatus);
}